package tp.disenio.client;

import com.google.gwt.core.client.GWT;
import com.google.gwt.event.dom.client.ClickEvent;
import com.google.gwt.event.dom.client.ClickHandler;
import com.google.gwt.event.dom.client.KeyPressEvent;
import com.google.gwt.event.dom.client.KeyPressHandler;
import com.google.gwt.user.client.Window;
import com.google.gwt.user.client.rpc.AsyncCallback;
import com.google.gwt.user.client.ui.Composite;
import com.google.gwt.user.client.ui.AbsolutePanel;
import com.google.gwt.user.client.ui.Button;
import com.google.gwt.user.client.ui.Label;
import com.google.gwt.user.client.ui.FileUpload;
import com.google.gwt.user.client.ui.RootPanel;
import com.google.gwt.user.client.ui.TextBox;

public class AltaParticipante extends Composite{
	private Button btnHome;
	private Button btnCancelar;
	private Button btnAceptar;
	private TextBox txtBxNombre;
	private TextBox txtBxEmail;
	private Label lblUsuario;
	private Label lblSalir;
	private FileUpload fileUpload;
	private CompetenciaDTO competencia;
	
	
	public AltaParticipante(String user, CompetenciaDTO competencia) {
		
		final RootPanel rootPanel = RootPanel.get("nameFieldContainer");
		
		AbsolutePanel absolutePanel = new AbsolutePanel();
		initWidget(absolutePanel);
		absolutePanel.setSize("1024px", "576px");
		
		setCompetencia(competencia);
		
		
		// WIDGETS
		
		btnHome = new Button("Home");
		absolutePanel.add(btnHome, 100, 100);
		
		btnAceptar = new Button("Aceptar");
		absolutePanel.add(btnAceptar, 430, 361);
		
		btnCancelar = new Button("Cancelar");
		absolutePanel.add(btnCancelar, 515, 361);
				
		txtBxNombre = new TextBox();
		absolutePanel.add(txtBxNombre, 439, 210);
		
		txtBxEmail = new TextBox();
		absolutePanel.add(txtBxEmail, 439, 257);
		
		fileUpload = new FileUpload();
		absolutePanel.add(fileUpload, 439, 297);
		
		
		
		// LABELS
		
		lblUsuario = new Label("");
		lblUsuario.setText(user);
		lblUsuario.setStyleName("usuarioLabel");
		absolutePanel.add(lblUsuario, 820, 95);
		
		lblSalir = new Label("Salir");
		lblSalir.setStyleName("usuarioLabel");
		absolutePanel.add(lblSalir, 780, 95);
		
		Label lblAgregarParticipante = new Label("Agregar Participante");
		lblAgregarParticipante.setStyleName("subTitulo");
		absolutePanel.add(lblAgregarParticipante, 400, 150);
		
		Label lblNombre = new Label("Nombre");
		lblNombre.setStyleName("label");
		absolutePanel.add(lblNombre, 359, 221);
		
		Label lblEmail = new Label("E-mail");
		lblEmail.setStyleName("label");
		absolutePanel.add(lblEmail, 359, 262);
		
		Label lblImagen = new Label("Imagen");
		lblImagen.setStyleName("label");
		absolutePanel.add(lblImagen, 359, 297);
		lblImagen.setSize("37px", "18px");
		
		

		// HANDLERS		
		
		getLblUsuario().addClickHandler(new ClickHandler() {
			
			@Override
			public void onClick(ClickEvent event) {
			
				Window.alert("Modficar Datos Usuario ");
				
			}
		});
		
		
		getLblSalir().addClickHandler(new ClickHandler() {
			
			@Override
			public void onClick(ClickEvent event) {
				
//				setVisibilidad(false);
				rootPanel.remove(rootPanel.getWidget(1));
				rootPanel.add(new Ingreso(),(Window.getClientWidth()/3),150);
				Window.alert("Usted se ha deslogeado");
				
			}
		});
		
		
		getBtnHome().addClickHandler(new ClickHandler() {
			
			@Override
			public void onClick(ClickEvent event) {
			
//				setVisibilidad(false);
				rootPanel.remove(rootPanel.getWidget(1));
				rootPanel.add(new HomeUA(getLblUsuario().getText()),100,50);
				
			}
		});
		
		getBtnCancelar().addClickHandler(new ClickHandler() {
			
			@Override
			public void onClick(ClickEvent event) {
				
//				setVisibilidad(false);
				rootPanel.remove(rootPanel.getWidget(1));
				rootPanel.add(new ListarParticipantes(getLblUsuario().getText(), getCompetencia()),100,50);
				// TODO
			}
		});
		
		
		getBtnAceptar().addClickHandler(new ClickHandler() {
			
			@Override
			public void onClick(ClickEvent event) {
				// TODO Auto-generated method stub

				final AltaParticipanteServiceAsync altaParticipanteService = GWT.create(AltaParticipanteService.class);
				

				 AsyncCallback<String> callback = new AsyncCallback<String>() {
					 
				     public void onFailure(Throwable caught) {
				     
				    	 // No se crea con exito un nuevo participante.
				    	 
				    	 Window.alert(caught.getMessage());
				    }

					@Override
					public void onSuccess(String result) {
						// Crecion con exito de un participante
						
						Window.alert((String)result);
//						setVisibilidad(false);
						rootPanel.remove(rootPanel.getWidget(1));
						rootPanel.add(new ListarParticipantes(getLblUsuario().getText(), getCompetencia()),100,50);
						
					}
				  };
				  
				  try{
					  validarCampos();
					  altaParticipanteService.altaParticipante(getTxtBxNombre().getText(),getTxtBxEmail().getText(), getCompetencia(), callback);
					  
				  }
				  catch (IllegalArgumentException mensaje) {
					
					  	Window.alert(mensaje.getMessage());
				}
				  
			

				
			}
		});
		
		getTxtBxNombre().addKeyPressHandler(new KeyPressHandler() {
			
			@Override
			public void onKeyPress(KeyPressEvent event) {
			
				if(event.getUnicodeCharCode()==13){
					getBtnAceptar().click();
					
				}
			
			}
		});
		
		getTxtBxEmail().addKeyPressHandler(new KeyPressHandler() {
			
			@Override
			public void onKeyPress(KeyPressEvent event) {
			
				if(event.getUnicodeCharCode()==13){
					getBtnAceptar().click();
					
				}
			
			}
		});
	
		// TAB INDEX
		
		getBtnHome().setTabIndex(1);
		getTxtBxNombre().setTabIndex(2);
		getTxtBxEmail().setTabIndex(3);
		getFileUpload().getElement().setTabIndex(4);
		getBtnAceptar().setTabIndex(5);
		getBtnCancelar().setTabIndex(6);
		
	}
	
	public boolean validarCampos() throws IllegalArgumentException{
		
		if(getTxtBxNombre().getText().equals("") || getTxtBxEmail().getText().equals("") /*|| getFileUpload().getFilename().equals("")*/){
			throw new IllegalArgumentException("Debe ingresar todos los campos");
		}
		
		if(!getTxtBxEmail().getText().contains("@") || !getTxtBxEmail().getText().contains(".com")){
			
			throw new IllegalArgumentException("El E-mail es incorrecto");
		}
			
		return true;
	}
	
	public Label getLblUsuario() {
		return lblUsuario;
	}
	public void setLblUsuario(Label lblUsuario) {
		this.lblUsuario = lblUsuario;
	}
	public Label getLblSalir() {
		return lblSalir;
	}
	
	public Button getBtnHome() {
		return btnHome;
	}
	public Button getBtnCancelar() {
		return btnCancelar;
	}
	
	public void setVisibilidad(boolean estado){
		this.setVisible(estado);
	}
	
	/**
	 * @return the btnAceptar
	 */
	public Button getBtnAceptar() {
		return btnAceptar;
	}

	
	/**
	 * @return the txtBxNombre
	 */
	public TextBox getTxtBxNombre() {
		return txtBxNombre;
	}


	/**
	 * @return the txtBxEmail
	 */
	public TextBox getTxtBxEmail() {
		return txtBxEmail;
	}
	
	/**
	 * @return the competencia
	 */
	public CompetenciaDTO getCompetencia() {
		return competencia;
	}


	/**
	 * @param competencia the competencia to set
	 */
	public void setCompetencia(CompetenciaDTO competencia) {
		this.competencia = competencia;
	}
	
	/**
	 * @return the fileUpload
	 */
	public FileUpload getFileUpload() {
		return fileUpload;
	}


}
